/*! \file ILogger.hpp
    \brief Une interface permettant de manipuler un logger quelconque.
*/

#ifndef __ILogger__H
#define __ILogger__H



#include <cstdlib>
#include <list>
#include <fstream>
#include <algorithm>
#include <sstream>
#include <iostream>

#include "alloc_stats.h"
using namespace std;

/**
 *\brief interface permettant de manipuler plusieurs loggers, permet de ne pas avoir 
 * a toucher a la bibliotheque d'interception.
 *\class ILogger.
 */
class ILogger
{
  
public:
  /**
   *\brief partie un du callback malloc.
   */
  virtual void startMalloc(void* addr,size_t size,
				  unsigned index,int memory_total)=0;
  
  /**
   *\brief partie un du callback calloc.
   */
  virtual void startCalloc(
			   void* addr,
			   size_t nmemb,
			   size_t size,
			   int compteur_calloc,
			   unsigned int memory_allocation)=0;
  
  /**
   *\brief partie un du callback realloc.
   */
  virtual void startRealloc(void*  v,
			    void*  ret,
			    size_t n,
			    int id,size_t tm)=0;
  
  /**
   *\brief code qui fait le traitement lors de l'interception d'un free
   *@see 
   */
  virtual void startFree(void* addr,unsigned nbfree)=0;
  
  
  /**
   *\brief
   *
   */
  virtual void finalizeLog(alloc_stats& stats)=0;
  
  /**
   *\brief 
   */
  virtual void endElement(const char* type)=0;
  /**
   *\brief ne fait rien
   */
  virtual ~ILogger(){};

};

#endif


